#!/usr/bin/env bash

# This script fetches, builds, and runs the BoringSSL
# TLS test tool ('BoGo') against rustls.

set -xe

case ${BOGO_SHIM_PROVIDER:-aws-lc-rs} in
  ring)
      cargo build -p rustls --example bogo_shim $(../admin/all-features-except aws-lc-rs,aws_lc_rs,fips rustls)
      cpp -P -DRING config.json.in > config.json
      ;;
  aws-lc-rs)
      cargo build -p rustls --example bogo_shim $(../admin/all-features-except ring,fips rustls)
      cpp -P -DAWS_LC_RS config.json.in > config.json
      ;;
  aws-lc-rs-fips)
      cargo build -p rustls --example bogo_shim $(../admin/all-features-except ring rustls)
      cpp -P -DAWS_LC_RS -DFIPS config.json.in > config.json
      ;;
  existing)
      ;;
  *)
      echo "unsupported BOGO_SHIM_PROVIDER: supported are (ring|aws-lc-rs|existing)"
      exit 1
      ;;
esac

if [ ! -e bogo/ssl/test/runner/runner.test ] ; then
  ./fetch-and-build
  cp -v keys/* bogo/
fi

# Best effort on OS-X
case $OSTYPE in darwin*) set +e ;; esac

( cd bogo/ssl/test/runner && ./runner.test -shim-path ../../../../../target/debug/examples/bogo_shim \
     -shim-config ../../../../config.json \
     -pipe \
     -allow-unimplemented \
     -test.timeout 60s \
     "$@") # you can pass in `-test "Foo;Bar"` to run specific tests
true
